Za uvod si najprej preberite nekaj o stripu Alan Ford (in še nekaj).
Lakota
Broj 1 je z zaskrbljenostjo potresel škatlo. Le nekaj fižolovih zrn je še ostalo. Spet lakota v Cvetličarni. Začel je deliti - eno zrno za Alana, eno za Jeremijo, eno zanj, eno za Grunfa. In spet eno zrno za Alana, eno za Jeremijo, eno zanj, eno za Grunfa in ... Ko so mu ostala manj kot 4 zrna, je zavzdihnil in vsa pospravil na svoj kupček. Že je želel poklicati k večerji, ko je v kotu zastokal Jeremija in se prebudi. Ah, tudi on mora dobiti svoj delež. Zrna na kup in eno za Alana, eno za Grunfa, ... Seveda, ko je bilo manj kot pet zrn, gredo spet vsa na kupček Broja 1. In ko je bil že skoraj pri koncu, se od nekje pojavita Oliver in Bob Rock. In spet od začetka ...
Da bo šlo hitreje, sestavi funkcijo zrna(fižoli, številoOseb)
, ki za dano število zrn in oseb vrne
koliko zrn dobijo člani skupine TNT in koliko Broj 1. Npr.
>>>zrna(72, 5)
14, 16
def zrna(koliko, osebe): '''Koliko zrn dobi osebe oseb, če vsi dobijo v načelu enako, morebiten preostanek pa pripade dodatno eni osebi''' večina = koliko // osebe en = koliko - večina * (osebe - 1) return večina, en
sir Oliver, izposojena ura in jašek
Na sprehodu sir Oliver čisto slučajno zavije v zlatarno in čez nekaj trenutkov
je že zunaj, s kričečim prodajalcem za sabo. Par hitrih zavojev in ko že kaže, da je
sir Oliver ušel, se znajde v slepi ulici. Gentleman kot sir Oliver definitivno je, si
ne bo dovolil, da bi ga zasačili z uro, ki si jo je sposodil, zato jo hitro odvrže v navpični jašek
na dnu katerega je malo vode. Skrbno posluša in čez nekaj časa zasliši čof.
Pomagaj mu in napiši funkcijo globinaJaška(čas)
, ki za podatek koliko časa je minilo od trenutka, ko
je sir Oliver spustil uro, do trenutka, ko je reklo čof, vrne na tri decimalke natančno globino jaška v metrih. Če ne poznaš enačb,
si pomagaj z wikipedijo. Za gravitacijski pospešek vzemi 9.81 m/s.
Namig: Python pozna funkcijo round(x, n)
. Kaj pa dela, ugotovi v dokumentaciji
ali pa bo dovolj, da pogledaš naslednjo nalogo.
def globinaJaška(t): '''Kako globok jke jašek, če premet pada t sekund''' g = 9.81 globina = 0.5 * g * t**2 rez = round(globina, 3) return rez
Grunf topničar
Grunf strelja s topom na domovanje Superhika, a ga nikakor ne more zadeti.
Tukaj je funkcija, ki izračuna maksimalno višino leta krogle,
import math
def maxViš(v, kot):
'''Maks. višina pri poševnem metu'''
kotRad = kot * math.pi / 180
najV = v**2 * math.sin(kotRad)**2
g = 10.0
zaokr = round(najV / (2*g), 1)
return zaokr
a kaj ko potrebuje domet!
Pomagaj mu in sestavi funkcijo domet(v, kot)
, ki na eno decimalko natančno
izračuna domet krogle, če s hitrostjo v
ustrelimo pod kotom kot
stopinj. Če si pozabil, gre za poševni met
Za g vzemi kar 10 m/s^2, zračni upor pa zanemari.
>>> domet(10, 45)
10.0
>>> domet(10, 60)
8.7
import math def domet(v, kot): '''Domet pri poševnem metu''' kotRad = kot * math.pi / 180 dom = v*v*math.sin(2*kotRad) g = 10.0 zaokr = round(dom / g, 1) return zaokr
Za uvod si preberite nekaj o Mirku in Slavku:
Prevara s čekom
Kurirji so iznajdljivi. Seveda Mirko in Slavko pa sploh. V roke sta dobila ček, kjer banka prinositelju izplača vrednos na njem napisanega tromestnega zneseka. Ampak Mirko ne bi bil Mirko, če ne bi kaj hitro ugotovil, da z malo spretnosti in ostrim nožičem lahko ček neopazno spremeni tako, da premeša števke na znesku. A kaj, ko je Mirko bolj slab v matematiki, rad pa bi ček popravil tako, da bo dobil kar se da veliko. Potoži se Slavku. Ah, to pa ja ni problem. Poglej to funkcijo. Malo jo spremeni, pa boš dobil največje možno število. Mirko sedaj proučuje
def kajDelam(n):
'''Pozor, n je obvezno tromestno naravno število
Spremenljivke imajo namenoma čudna imena.
'''
a = n - n % 10
b = a // 10 % 10
c = n - a
d = n // 100
e = max(b, c, d)
f = min(b, c, d)
g = b + c + d - e - f
return f, g, e
Premisli kaj funkcija počne in na osnovi ideje v njej namesto Mirka sestavi funkcijo najTromestno
, ki iz
danega tromestnega števila sestavi največje možno tromestno število
>>> najTromestno(137)
731
>>> najTromestno(625)
652
def najTromestno(n): '''Iz števk danega tromestnega števila naredi največje možno število''' enice = n % 10 desetice = n // 10 % 10 stotice = n // 100 najmanjše = min(enice, desetice, stotice) največje = max(enice, desetice, stotice) srednje = enice + desetice + stotice - najmanjše - največje # srednje po velikosti število = največje * 100 + srednje * 10 + najmanjše return število
Mirko, pazi metak!
Verjetno najbolj znamenit dialog med Mirkom in Slavkom je:
Kako hitro se mora Mirko skloniti, če Slavko strel opazi n
metrov proč
Sestavi funkcijo skloniSe(kolikoM, hitrostMetka)
, ki pove, v koliko sekundah, desetinkah
in stotinkah se mora Mirko skloniti, če Slavko opazi metek kolikoM
metrov proč in ima hitrost
hitrostMeta
m/s. Pazi, da bodo stotinke ustrezno zaokrožene!
def skloniSe(kolikoM, hitrostMetka): '''V koliko sekundah, destinkah in stotinkah se mora Mirko skloniti, če Slavko opazi metek `kolikoM` metrov proč in ima hitrost `hitrostMeta` m/s.''' čas = kolikoM/hitrostMetka časStotink = int(čas * 100 + 0.5) # če prištejemo 0.5, bomo prav zaokrožili stotink = časStotink % 10 desetink = (časStotink // 10) % 10 sekund = časStotink // 100 return (sekund, desetink, stotink)
Metak mrzkega neprijatelja
Slavka skrbi, če bo tudi on dovolj hiter, da bo ubežal krogli. Zato mu sestavi program, ki bo meril njegov rekacijski čas.
Če na začetek programa napišemo
import time
bomo, med drugim, dobili funkcijo time
, ki s klicem time.time()
vrne čas v sekundah od nekega trenutka v davni preteklosti.
Napiši program, ki bo izpisal Slavko, pazi metak! in izmeril, koliko časa je trajalo, da je Slavko pritisnil na tipko
Enter in potem izpisal, koliko sekund je Slavko potreboval za pritisk na tipko.
Namig: če veš, koliko je bila ura pred klicem funkcije input in koliko je bila ura po klicu,
znaš izračunati, koliko časa je minilo vmes.
>>>Slavko, pazi metak!
Slavko je reagiral v 2.503019332885742 s.
import time začetek = time.time() input('Slavko, pazi metak!') konec = time.time() print('Slavko je reagiral v', konec - začetek, 's.') print('\n')
Mirko in Slavko ob pomoči Dimnjačara pečeta palačinke
Mirko in Slavko sta v uspešni akciji zaplenila velike količine moke in jajc. Zato bosta za celo vas Glavuša na Kozari napekla palačinke.
Ampak kaj, ko ne vesta koliko. Dimnjačar jima je zato napisal funkcijo A kaj, ko mu je tik preden je odšel, izpod listov trpotca, ki jih je imel na čelu namesto obveze padlo par kapelj krvi in je sedaj funkcija
def kolikoPalačink(steviloOdraslih, steviloOtrok):
'''Vrne število paslačink potrebnih, da nasiti vse povabljene'''
PACKA
PACKA
palacinkeOdrasli = steviloOdraslih * odrasel
palacinkeOtroci = steviloOtrok * otrok
palacinkeSkupaj = palacinkeOdrasli + palacinkeOtroci + PACKA # še malo za rezervo
return palacinkeSkupaj
Na srečo pa so ostali še trije izpisi, ko jima je pokazal delovanje funkcije. Pomagaj Mirku in Slavku in dopolni funkcijo, da se bo obnašala kot prej, če so izpisi
Koliko je odraslih: 12
Koliko otrok: 5
Napeči je potrebno 77 palačink.
Koliko je odraslih: 21
Koliko otrok: 14
Napeči je potrebno 140 palačink.
Koliko je odraslih: 10
Koliko otrok: 15
Napeči je potrebno 87 palačink.
def kolikoPalačink(steviloOdraslih, steviloOtrok): '''Vrne število paslačink potrebnih, da nasiti vse povabljene''' odrasel = 5 otrok = 2 palacinkeOdrasli = steviloOdraslih * odrasel palacinkeOtroci = steviloOtrok * otrok palacinkeSkupaj = palacinkeOdrasli + palacinkeOtroci + 7 # še malo za rezervo return palacinkeSkupaj
Slavko peče torte
Po velikem uspehu s peko palačink, se je Slavko spravil peči torte. Po receptu za torto potrebujemo 0.8 kg margarine, 2 kg moke in 1.5 kg sladkorja. Sedaj Slavka zanima, kakšno je, glede na količine sestavin, ki jih ima na razpolago, največje možno število tort, ki jih lahko naredi.
Namig: Funkcija min
vrne najmanjšega izmed svojih parametrov.
Primer: Če imamo 5kg margarine, 7kg moke in 3.5kg sladkorja, lahko spečemo dve torti.
Slavku sestavi funkcijo kolikoTort(margarina, moka, sladkor)
, ki glede na dani recept
določi največje možno število tort.
def kolikoTort(margarina, moka, sladkor): '''Koliko lahko največ spečemo tort''' receptMargarina = 0.8 # količina margarine po receptu receptMoka = 2 # količina moke za eno torto po receptu receptSladkor = 1.5 # količina sladkorja po receptu # koliko tort glede na posamezno sestavimo izMoke = int(moka/receptMoka) izMargarine = int(margarina/receptMargarina) izSladkorja = int(sladkor/receptSladkor) možnoTort = min(izMoke, izMargarine, izSladkorja) return možnoTort
Mirko in smučarski skoki
Medtem, ko Slavko peče torte, je Mirko organiziral tekmovanje v smučarskih skokih.
Pri smučarskih skokih so točke skoka vsota:
Vsak od petih sodnikov lahko skakalcu dodeli največ 20 točk, ki so odvisne od položaj smuči med letom, ravnotežja med letom, položaja telesa, pristanka ipd. Točke sloga so vsota točk posamičnih sodnikov, pri čemer se najboljša in najslabša ocena ne upoštevata.
Mirko ima več kot dovolj dela z iskanjem primernih sodnikov (pa še z njegovo matematiko je
bolj tako, tako ...). Zato mu pomagaj in sestavi funckijo točkeSlog(oc1,oc2, oc3, oc4, oc5)
,
ki za danih 5 ocen določi točke za slog.
Namig: Poleg funkcije min
Python pozna tudi funkcijo max
, ki se obnaša podobno!
def točkeSlog(oc1,oc2, oc3, oc4, oc5): '''Koliko točk za slog je dobil skakalec''' vseSkupaj = oc1 + oc2 + oc3 + oc4 + oc5 najslabša = min(oc1,oc2, oc3, oc4, oc5) najboljša = max(oc1,oc2, oc3, oc4, oc5) return vseSkupaj - najslabša - najboljša